iT邦幫忙

2024 iThome 鐵人賽

DAY 26
1
DevOps

在Local建立完整的開發環境筆記系列 第 26

Day 26:Sample Code

  • 分享至 

  • xImage
  •  

今天要寫一支簡單的程式來測試 CICD。

Golang Web 應用與 Docker 部署說明

Golang 代碼 (main.go)

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, World from Golang!")
}

func main() {
    http.HandleFunc("/", handler)
    fmt.Println("Server starting on port 8080...")
    http.ListenAndServe(":8080", nil)
}

代碼解釋

  • package main: 定義包名。可執行程序的主包必須叫 main
  • import: 導入所需的包:
    • fmt: 用於格式化輸出
    • net/http: 用於創建 HTTP 服務器
  • func handler: 處理 HTTP 請求的函數:
    • w http.ResponseWriter: 用於寫入 HTTP 響應
    • r *http.Request: 包含有關傳入 HTTP 請求的信息
  • fmt.Fprintf(w, "Hello, World from Golang!"): 將問候語寫入 HTTP 響應
  • func main(): 程序的入口點
  • http.HandleFunc("/", handler): 將根路徑 ("/") 的請求映射到 handler 函數
  • http.ListenAndServe(":8080", nil): 啟動 HTTP 服務器,監聽 8080 端口

Dockerfile

FROM golang:1.16-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o main .

FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/main .
EXPOSE 8080
CMD ["./main"]

Dockerfile 解釋

  1. 構建階段:

    • FROM golang:1.16-alpine AS builder: 使用 Golang Alpine 映像作為基礎,命名為 "builder"
    • WORKDIR /app: 設置工作目錄為 /app
    • COPY . .: 複製所有文件到容器的 /app 目錄
    • RUN go build -o main .: 編譯 Go 程序,生成 "main" 可執行文件
  2. 運行階段:

    • FROM alpine:latest: 使用輕量級的 Alpine Linux 作為基礎映像
    • WORKDIR /root/: 設置工作目錄為 /root/
    • COPY --from=builder /app/main .: 從 builder 階段複製編譯好的可執行文件
    • EXPOSE 8080: 聲明容器將使用 8080 端口 (僅作為文檔作用)
    • CMD ["./main"]: 定義容器啟動時運行的命令

這個 Dockerfile 使用多階段構建技術,有效減小最終映像的大小,只包含運行應用所需的最小組件。


上一篇
Day 25:GitLab CD
下一篇
Day 27:Golang 應用部署到 Kubernetes 與 GitLab CI
系列文
在Local建立完整的開發環境筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言